Bài học Scratch cho học sinh THCS

Danh sách (list) cơ bản: lưu trữ và truy xuất dữ liệu

Học cách dùng danh sách để gom nhiều giá trị vào một chỗ — từ bảng điểm, câu trả lời quiz đến danh sách vật phẩm trong game.

Danh sách là gì?

Danh sách (list) trong Scratch giống một cuốn sổ có nhiều dòng: mỗi dòng chứa một mục (số hoặc chữ), xếp theo thứ tự. Khác với biến chỉ lưu một giá trị tại một thời điểm, danh sách lưu được nhiều giá trị cùng lúc mà không ghi đè lên nhau.

Nhóm Biến chứa cả biến và danh sách
Danh sách nằm cùng nhóm Biến — nhấn Make a List để tạo mới
Biến Lưu một giá trị: điểm = 15
Danh sách Lưu nhiều mục: trái cây = [táo, chuối, cam]

Trong các ngôn ngữ lập trình khác, danh sách thường gọi là mảng (array). Scratch gọi đơn giản là list — ý tưởng giống nhau: lưu tập hợp dữ liệu có thứ tự.

💡 Ghi nhớ

Scratch đánh số vị trí trong danh sách bắt đầu từ 1, không phải 0. Mục đầu tiên là phần tử 1, mục thứ hai là phần tử 2

Cách tạo danh sách

  1. Mở nhóm Biến → nhấn Make a List.
  2. Đặt tên rõ ràng: điểm cao, câu trả lời, vật phẩm
  3. Chọn For all sprites hoặc For this sprite only — giống khi tạo biến.
  4. Nhấn OK — danh sách trống xuất hiện trên sân khấu (có thể ẩn/hiện bằng ô tick).

Danh sách trống ban đầu không có phần tử nào. Bạn thêm dữ liệu bằng khối lệnh hoặc gõ trực tiếp vào hộp hiển thị trên sân khấu khi soạn thảo.

📌 Ví dụ: Danh sách mua sắm

Tạo list giỏ hàng. Mỗi lần người chơi chọn một món, dùng thêm … vào giỏ hàng với giá trị trả lời hoặc tên món. Danh sách dài dần: táo, sữa, bánh…

Các khối làm việc với danh sách

Scratch cung cấp bộ khối chuyên dụng để thêm, đọc, sửaxóa phần tử:

Khối Chức năng
thêm … vào [list] Thêm mục mới vào cuối danh sách
chèn … vào (n) của [list] Chèn mục vào vị trí n cụ thể
xóa (n) của [list] Xóa mục ở vị trí n
xóa tất cả của [list] Làm rỗng toàn bộ danh sách
thay thế phần tử (n) của [list] bằng … Đổi nội dung mục ở vị trí n
phần tử (n) của [list] Đọc giá trị ở vị trí n
độ dài của [list] Trả về số mục hiện có
[list] có chứa …? Kiểm tra mục có tồn tại không (đúng/sai)
khi nhấn cờ xanh
  xóa tất cả của [thành phố v]
  thêm [Hà Nội] vào [thành phố v]
  thêm [Đà Nẵng] vào [thành phố v]
  thêm [TP.HCM] vào [thành phố v]
  nói (phần tử (2) của [thành phố v]) trong [2] giây

Script trên tạo danh sách 3 thành phố và nói tên thành phố thứ hai — Đà Nẵng.

Lưu trữ dữ liệu bằng danh sách

Danh sách phù hợp khi bạn không biết trước sẽ có bao nhiêu mục, hoặc khi cần giữ lịch sử thay vì chỉ giá trị mới nhất.

Bảng xếp hạng Lưu nhiều điểm số sau mỗi ván chơi
Quiz / khảo sát Gom câu trả lời của người dùng
Kho đồ game Danh sách vật phẩm người chơi đã nhặt
📌 Ví dụ: Thu thập 3 câu trả lời
khi nhấn cờ xanh
  xóa tất cả của [câu trả lời v]
  hỏi [Tên bạn là gì?] và đợi
  thêm (trả lời) vào [câu trả lời v]
  hỏi [Màu yêu thích?] và đợi
  thêm (trả lời) vào [câu trả lời v]
  hỏi [Sở thích?] và đợi
  thêm (trả lời) vào [câu trả lời v]

Sau ba câu hỏi, list câu trả lời chứa đủ 3 mục — phần tử 1 là tên, phần tử 2 là màu, phần tử 3 là sở thích.

💡 Ghi nhớ

Luôn xóa tất cả danh sách khi bắt đầu dự án mới (cờ xanh) nếu không muốn dữ liệu cũ từ lần chạy trước còn sót lại.

Truy xuất và duyệt danh sách

Truy xuất nghĩa là lấy dữ liệu ra để dùng. Ba cách phổ biến:

Đọc theo vị trí (chỉ số)

Dùng khối phần tử (n) của [list] khi biết mục nằm ở vị trí thứ mấy — ví dụ hiển thị câu trả lời đầu tiên.

Kiểm tra có tồn tại không

Khối list có chứa …? trả về đúng nếu tìm thấy — hữu ích cho game "đoán từ có trong danh sách gợi ý không".

Duyệt toàn bộ bằng vòng lặp

Kết hợp biến đếm i với độ dài của list để đọc từng mục:

đặt [i v] thành [1]
lặp đến khi <(i) > (độ dài của [điểm cao v])>
  nói (phần tử (i) của [điểm cao v]) trong [1] giây
  thay đổi [i v] thêm [1]
kết thúc

Vòng lặp đọc lần lượt mọi điểm trong bảng xếp hạng và nói ra — cách cơ bản để "in" cả danh sách.

Logo Scratch
Duyệt danh sách bằng vòng lặp là kỹ năng nền tảng khi làm quiz, menu và bảng điểm

Hiển thị danh sách trên sân khấu

Giống biến, danh sách có hộp hiển thị trên sân khấu — bạn thấy toàn bộ mục, có thể thêm/sửa/xóa trực tiếp khi soạn thảo. Tick ô vuông cạnh tên list trong palette để bật/tắt.

Khi chạy dự án, hộp hiển thị cập nhật theo thời gian thực — người chơi thấy giỏ hàng hoặc bảng điểm thay đổi ngay khi script thêm hoặc xóa mục.

📌 Mẹo

Đặt hộp danh sách ở góc màn hình, thu nhỏ nếu list dài. Với dự án trình diễn, có thể ẩn list và chỉ dùng khối nói để đọc từng phần tử — giao diện gọn hơn.

Mẹo và lỗi thường gặp

Nhầm chỉ số 0 và 1

Phần tử đầu tiên là 1, không phải 0. Gọi phần tử 0 sẽ không cho kết quả mong đợi.

Xóa nhầm vị trí

Sau khi xóa phần tử 2, các mục phía sau "dồn lên" — phần tử cũ số 3 giờ thành số 2. Khi xóa nhiều mục trong vòng lặp, cân nhắc xóa từ cuối lên hoặc dùng biến đếm cẩn thận.

Quên kiểm tra danh sách rỗng

Trước khi đọc phần tử 1, nên kiểm tra độ dài > 0 — tránh lỗi khi list chưa có dữ liệu.

⚠️ Lỗi phổ biến

Dùng nhiều biến (tên1, tên2, tên3…) thay vì một list — khó mở rộng khi cần thêm mục thứ 4, 5… Hãy chuyển sang list khi số lượng mục không cố định.

  1. Đặt tên list rõ nghĩa, xóa tất cả khi cờ xanh.
  2. Thêm dữ liệu bằng thêm … vào hoặc chèn … vào.
  3. Đọc bằng phần tử (n) hoặc vòng lặp + độ dài.
  4. Kiểm tra bằng có chứa …? khi cần tìm kiếm.
  5. Bật hộp hiển thị để debug hoặc cho người chơi xem.

Dự án thực hành: Trò chơi đoán từ

Xây dựng game đơn giản: máy tính chọn một từ bí mật từ danh sách, người chơi đoán từng lần.

📌 Gợi ý triển khai
  1. Tạo list từ khóa chứa sẵn: mèo, chó, chim, cá (thêm bằng script hoặc gõ tay).
  2. Cờ xanh: chọn số ngẫu nhiên từ 1 đến độ dài của từ khóa, lưu vào biến vị trí.
  3. Biến từ bí mật = phần tử (vị trí) của từ khóa (không hiện lên sân khấu).
  4. Mỗi lần người chơi nhập đoán: so sánh với từ bí mật; nếu đúng → thắng; nếu sai → gợi ý "sai rồi".
  5. Mở rộng: list lịch sử đoán — mỗi lần sai thêm đoán vào list và hiển thị các từ đã thử.
💡 Ghi nhớ

Danh sách là bước đầu học cấu trúc dữ liệu — cách tổ chức nhiều thông tin có trật tự. Kỹ năng này sẽ theo bạn sang Python, JavaScript và mọi ngôn ngữ lập trình sau này.